#ifndef SYMBOLEVALUE_H
#define SYMBOLEVALUE_H

#include <string.h>
#include <iostream>

#include "Symbole.h"
#include "Arbre.h"
#include "Valeur.h"
using namespace std;

class SymboleValue : public Symbole, // un symbole valué est un symbole qui a une valeur, définie ou pas
public Noeud { // et c'est aussi une feuille de l'arbre abstrait
public:
    SymboleValue(Symbole s); // construit un symbole valué à partir d'un symbole existant s
    
    ~SymboleValue() {}
    void afficher(unsigned short indentation = 0); // affiche le symbole en tant que noeud de l'arbre
    
    void afficherAda();

    inline Valeur* getValeur() {
        return valeur;
    } // accesseur    
    
    inline void setValeur(Valeur* valeur) {
        this->valeur = valeur;
        defini = true;
    } // accesseur

    
    inline bool estDefini() {
        return defini;
    } // accesseur

    friend ostream & operator <<(ostream & cout, SymboleValue symb); // affiche un symbole value sur cout

private:
    bool defini; // indique si la valeur du symbole est définie
    Valeur* valeur;
};

#endif /* SYMBOLEVALUE_H */
